package com.ruoyi.trainingManagement.service.impl;

import java.util.Arrays;
import java.util.List;

import com.ruoyi.trainingManagement.mapper.CourseStudentInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.trainingManagement.mapper.ClassScheduleDetailedMapper;
import com.ruoyi.trainingManagement.domain.ClassScheduleDetailed;
import com.ruoyi.trainingManagement.service.IClassScheduleDetailedService;

/**
 * 课程完整上课时间Service业务层处理
 *
 * @author chenxl
 * @date 2025-07-07
 */
@Service
public class ClassScheduleDetailedServiceImpl implements IClassScheduleDetailedService
{
    @Autowired
    private ClassScheduleDetailedMapper classScheduleDetailedMapper;
    @Autowired
    private CourseStudentInfoMapper courseStudentInfoMapper;

    /**
     * 查询课程完整上课时间
     *
     * @param id 课程完整上课时间主键
     * @return 课程完整上课时间
     */
    @Override
    public ClassScheduleDetailed selectClassScheduleDetailedById(String id)
    {
        return classScheduleDetailedMapper.selectClassScheduleDetailedById(id);
    }

    /**
     * 查询课程完整上课时间列表
     *
     * @param classScheduleDetailed 课程完整上课时间
     * @return 课程完整上课时间
     */
    @Override
    public List<ClassScheduleDetailed> selectClassScheduleDetailedList(ClassScheduleDetailed classScheduleDetailed)
    {
        return classScheduleDetailedMapper.selectClassScheduleDetailedList(classScheduleDetailed);
    }

    /**
     * 新增课程完整上课时间
     *
     * @param classScheduleDetailed 课程完整上课时间
     * @return 结果
     */
    @Override
    public int insertClassScheduleDetailed(ClassScheduleDetailed classScheduleDetailed)
    {
        return classScheduleDetailedMapper.insertClassScheduleDetailed(classScheduleDetailed);
    }

    /**
     * 修改课程完整上课时间
     *
     * @param classScheduleDetailed 课程完整上课时间
     * @return 结果
     */
    @Override
    public int updateClassScheduleDetailed(ClassScheduleDetailed classScheduleDetailed)
    {
        return classScheduleDetailedMapper.updateClassScheduleDetailed(classScheduleDetailed);
    }

    /**
     * 批量删除课程完整上课时间
     *
     * @param ids 需要删除的课程完整上课时间主键
     * @return 结果
     */
    @Override
    public int deleteClassScheduleDetailedByIds(String[] ids)
    {
        return classScheduleDetailedMapper.deleteClassScheduleDetailedByIds(ids);
    }

    /**
     * 删除课程完整上课时间信息
     *
     * @param id 课程完整上课时间主键
     * @return 结果
     */
    @Override
    public int deleteClassScheduleDetailedById(String id)
    {
        return classScheduleDetailedMapper.deleteClassScheduleDetailedById(id);
    }

    /**
     * 根据学生ID列表查询所有对应的课程表信息
     *
     * @param studentIds 学生ID列表
     * @return 课程表详细信息列表
     */
    @Override
    public List<ClassScheduleDetailed> selectClassSchedulesByStudentIds(List<String> studentIds) {
        // 1. 校验参数
        if (studentIds == null || studentIds.isEmpty()) {
            throw new IllegalArgumentException("学生ID列表不能为空");
        }

        // 2. 根据学生ID列表查询不重复的课程排课ID
        List<String> courseScheduleIds = courseStudentInfoMapper.selectDistinctCourseScheduleIdsByStudentIds(studentIds);

        // 3. 如果没有查询到课程排课ID，直接返回空列表
        if (courseScheduleIds == null || courseScheduleIds.isEmpty()) {
            return Arrays.asList();
        }

        // 4. 根据课程排课ID列表查询对应的所有课程表详细信息
        return classScheduleDetailedMapper.selectByCourseScheduleDetailsIds(courseScheduleIds);
    }
    /**
     * 根据courseScheduleDetailsId获取所有排课详细信息
     *
     * @param courseScheduleDetailsId 课程安排详情ID
     * @return 排课详细信息列表
     */
    @Override
    public List<ClassScheduleDetailed> selectAllByCourseScheduleDetailsId(String courseScheduleDetailsId) {
        return classScheduleDetailedMapper.selectAllByCourseScheduleDetailsId(courseScheduleDetailsId);
    }
}
